package com.gcit.seniorWish.web.common.constant.factory;

import com.gcit.seniorWish.web.common.constant.cache.Cache;
import com.gcit.seniorWish.web.common.constant.cache.CacheKey;
import com.gcit.seniorWish.web.common.persistence.model.*;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;

/**
 * 常量生产工厂的接口
 *
 * @author fengshuonan
 * @date 2017-06-14 21:12
 */
public interface IConstantFactory {

	/**
	 * 根据用户id获取用户名称
	 *
	 * @author stylefeng
	 * @Date 2017/5/9 23:41
	 */
	String getUserNameById(String userId);

	/**
	 * 根据用户id获取用户账号
	 *
	 * @author stylefeng
	 * @date 2017年5月16日21:55:371
	 */
	String getUserAccountById(String userId);

	/**
	 * 通过用户id获取角色名称
	 */
	String getRoleName(String userId);

	/**
	 * 通过角色id获取角色名称
	 */
	String getSingleRoleName(String roleId);

	/**
	 * 通过角色id获取角色英文名称
	 */
	String getSingleRoleRemark(String roleId);

	/**
	 * 获取部门名称
	 */
	String getDeptName(String deptId);

	/**
	 * 获取菜单的名称们(多个)
	 */
	String getMenuNames(String menuIds);

	/**
	 * 获取菜单名称
	 */
	String getMenuName(String menuId);

	String getMenuNameById(String id);

	String getNoticeTitle(String dictId);

	/**
	 * 获取字典名称
	 */
	String getDictName(String dictId);

	/**
	 * 根据字典名称和字典中的值获取对应的名称
	 */
	String getDictsByName(String name, Integer val);

	/**
	 * 根据父级字典的名称查询字典列表
	 */
	List<Dict> listDictsByPCode(String name);

	/**
	 * 根据父级和自己的字典编码获取字典名称
	 * 
	 * @param
	 * @return
	 */
	Dict getDictByCode(String pcode, String code);

	/**
	 * 根据父级字典编码与自己的字典值获取字典名称
	 * 
	 * @param pcode
	 * @param value
	 * @return
	 */
	Dict getDictByCodeAndValue(String pcode, Object value);

	/**
	 * 获取性别名称
	 */
	String getSexName(Integer sex);

	/**
	 * 获取用户登录状态
	 */
	String getStatusName(Integer status);

	/**
	 * 获取菜单状态
	 */
	String getMenuStatusName(Integer status);

	/**
	 * 查询字典
	 */
	List<Dict> findInDict(String id);

	/**
	 * 获取被缓存的对象(用户删除业务)
	 */
	String getCacheObject(String para);

	/**
	 * 获取子部门id
	 */
	List<String> getSubdeptId(String deptId, boolean includeSelf);

	@Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.SUB_DEPT_ID_LIST + "'+#deptId")
	List<String> getSubdeptId(String deptId);

	/**
	 * 获取所有父部门id
	 */
	List<String> getParentdeptIds(String deptId);

	String getParentDeptName(String deptId);

	/**
	 * 根据id获取学校实体
	 *
	 * @param schoolId
	 * @return
	 */
	SeniorSchool getSeniorSchoolById(String schoolId);


    SeniorSchoolClass getSeniorSchoolClassById(String classId);


	@Cacheable(value = Cache.BUSS, key = "'" + CacheKey.ENROLL_SCHOOL + "'+#enrollSchoolId")
	EnrollSchool getEnrollSchoolById(String enrollSchoolId);

	@Cacheable(value = Cache.BUSS, key = "'" + CacheKey.ENROLL_MAJOR + "'+#enrollMajorId")
	EnrollSchoolBatchMajor getEnrollMajorById(String enrollMajorId);

    @Cacheable(value = Cache.CONSTANT, key = "'" + CacheKey.SYS_CONFIG + "'+#configurateKey")
	SystemConfigurate getSystemConfigurateByKey(String configurateKey);
}
